package top.gangster.lunan.userservice.service;

import java.util.List;
import top.gangster.lunan.userservice.entity.Role;
import top.gangster.lunan.userservice.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import top.gangster.lunan.userservice.entity.UserAdd;
import top.gangster.lunan.userservice.entity.UserSave;
import top.gangster.lunan.userservice.entity.vo.UserVo;

/**
 * <p>
 * 使用这个系统的用户表，包含用户的登录与基础信息 服务类
 * </p>
 *
 * @author vic
 * @since 2021-11-06
 */
public interface UserService extends IService<User> {

  /**
   * 通过角色查找用户分页版本
   * @param current 当前页
   * @param size 当前页大小
   * @param role 角色
   * @return UserVo
   */
  UserVo getUserByRole(Integer current,Integer size,String role);

  /**
   * 通过角色查找用户不分页版本
   * @param roleId 角色id
   * @return UserSave
   */
  List<UserSave> getUserByRole(String roleId);

  /**
   * 通过部门名字查找用户
   * @param current 当前页
   * @param size 当前页大小
   * @param deptname 部门
   * @return UserVo
   */
  UserVo getUserByDept(Integer current,Integer size,String deptname);

  /**
   * 通过部门Id查找用户不分页
   * @param deptId 部门Id
   * @return List<UserSave>
   */
  List<UserSave> getUserByDept(String deptId);

  /**
   * 通过电话号码查找用户
   * @param current 当前页
   * @param size 当前页大小
   * @param phonenumber 电话
   * @return UserVo
   */
  UserVo getUserByPhone(Integer current,Integer size,String phonenumber);

  /**
   * 通过用户名查找用户
   * @param current 当前页
   * @param size 当前页大小
   * @param username 用户名
   * @return UserVo
   */
  UserVo getUserByName(Integer current,Integer size,String username);

  /**
   * 拿到用户列表
   * @param current 当前页
   * @param size 当前页大小
   * @return UserVo
   */
  UserVo getUserList(Integer current,Integer size);

  /**
   * 根据用户id获取用户
   * @param userId 用户id
   * @return User
   */
  User getUser(String userId);

  /**
   * 验证用户
   * @param uid 用户工号
   * @param password 密码
   * @return User
   */
  User verifyUser(String uid,String password);

  /**
   * 添加用户
   * @param users 添加用户参数
   * @return boolean
   */
  boolean addUser(UserAdd users);

  /**
   * 修改用户
   * @param users 修改用户参数
   * @return boolean
   */
  boolean modifyUser(UserAdd users);

  /**
   * 删除用户
   * @param users 删除用户参数
   * @return boolean
   */
  boolean deleteUser(UserAdd users);

  /**
   * 冻结用户
   * @param users 冻结用户参数
   * @return boolean
   */
  boolean freezeUser(User users);
}
